package com.hms.service;

import java.io.Serializable;
import java.util.List;

import com.hms.common.Pager;
import com.hms.dao.IBaseDao;

/**
 * 基础业务接口. <br>
 * 类详细说明.
 * <p>
 * Copyright: Copyright (c) 2013-3-29 下午3:07:43
 * <p>
 * Company: 北京宽连十方数字技术有限公司
 * <p>
 * 
 * @author wangpz@c-platform.com
 * @version 1.0.0
 */
public interface IBaseService<T, PK extends Serializable> {

	/**
     * 获取注入的Dao对象
     *
     * @return dao类
     */
    IBaseDao<T, PK> getDao();
    
	/**
	 * 根据ID获取实例对象
	 * 
	 * @param id
	 * @return
	 */
	public T get(PK id);

	/**
	 * 根据ID加载实例对象
	 * 
	 * @param id
	 * @return
	 */
	public T load(PK id);

	/**
	 * 根据IDS获取实例对象集
	 * 
	 * @param ids
	 *            ID数组
	 * @return 实例对象集
	 */
	public List<T> get(PK[] ids);

	/**
	 * 获取所有实例对象
	 * 
	 * @return 实例对象集
	 */
	public List<T> getAll();

	/**
	 * 根据属性值获取对象集
	 * 
	 * @param propertyName
	 *            属性名
	 * @param value
	 *            属性值
	 * @return 实例对象集
	 */
	public List<T> getAll(String propertyName, Object value);

	/**
	 * 根据属性值获取对象
	 * 
	 * @param propertyName
	 *            属性名
	 * @param value
	 *            属性值
	 * @return 实例对象
	 */
	public T get(String propertyName, Object value);

	/**
	 * 根据ID删除实例对象
	 * 
	 * @param id
	 */
	public void delete(PK id);

	/**
	 * 删除对象
	 * 
	 * @param t
	 */
	public void delete(T t);

	/**
	 * 根据IDS删除实例对象集
	 * 
	 * @param ids
	 */
	public void delete(PK[] ids);

	/**
	 * 获取实例总数
	 * 
	 * @return
	 */
	public Long getTotalCount();

	/**
	 * 保存实例
	 * 
	 * @param t
	 * @return ID
	 */
	public PK save(T t);

	/**
	 * 更新实例
	 * 
	 * @param t
	 */
	public void update(T t);

	/**
	 * 刷新session
	 */
	public void fulsh();

	/**
	 * 清除session
	 */
	public void clear();

	/**
	 * 清除某一对象
	 * 
	 * @param object
	 */
	public void evict(Object object);

	/**
	 * 根据分页对象查询
	 * 
	 * @param pager
	 * @return
	 */
	public Pager<T> findByPager(Pager<T> pager);

	/**
	 * 检查该属性的值是否存在
	 * 
	 * @param propertyName
	 *            属性名称
	 * @param value
	 *            属性值
	 * @return
	 */
	public Boolean isExist(String propertyName, Object value);

	/**
	 * @param propertyName
	 *            属性名称
	 * @param oldValue
	 *            属性原来的值
	 * @param newValue
	 *            属性新的值
	 * @return
	 */
	public Boolean isUnique(String propertyName, Object oldValue, Object newValue);
}
